在逆向工程的時候會使用很多觀念,首先得複習一下。
暫存器,CPU 內部存放資料的一個小空間。雖然可存放空間很小,但是他在 CPU 內部而且讀寫的速度極快,使它足以勝任機器上最接近處裡指令的記憶體。
在 IA-32 中,有四種基本暫存器 :
通用暫存器 : 8個 32bitSegment 暫存器 : 6個 16bit指令指針暫存器 : 1個 32bitFLAG 暫存器 : 1個 32bit
暫存器介紹 :

而 64 位元架構中,0~63 bit 名稱為 RAX。在各種通用暫存器中有部分常作為特定功用 :
返回值。Base Address 之位置暫存。計數器,使用 loop 時會減一。I / O 數據暫存器,常用來存除法的餘數。Stack base 指針原點位置暫存器目的位置暫存器Stack top 指針EBP ESP 是用來存 Stack 的位置資訊,可以透過 POP PUSH CALL RET 等操作改變。
ESI EDI 是與特定指令一起使用,主要用於記憶體複製。
? 圖片來自:
http://www.edwardbosworth.com/CPSC2105/Lectures/Slides_06/Chapter_07/Pentium_Architecture.htm
EFLAGS
這個暫存器裡面可以分成很多 FLAG,其中重要的有三個 flag :
Overflow 時,值為 1,若是最高為有效位元改變也會使其變成1。Overflow 時,值為 1。EIP
指向現在的指令應該要做到哪裡,不能直接修改,但是可以透過指令間接修改 ( 如 : JMP , CALL )。
Segment 暫存器
首先,segment 是一種記憶體保護措施。把記憶體化為多個區塊,區塊附上起始位置、範圍、存取權限等資料,這些紀錄放在 SDT ( segment descriptor table ) 上,而暫存器的值就是這個表上的索引。

? 圖片來自:
https://programmerprodigy.code.blog/2020/01/30/architecture-and-programming-model-of-8086/
字節序 Byte Order 或稱 端序 Endianness,就是指位元組的排列順序,其中大致分成 :
範例 : 0x12345678
大端序 : 12 34 56 78小端序 : 78 56 34 12注意 : 當存字串的時候就只是 char 存在 string 中,並以 \0 做結尾 :
範例 : "abcde”
大端序 : 61 62 63 64 65 00小端序 : 61 62 63 64 65 00盡管大端序看起來十分直觀,但是 x86 CPU 是使用小端序,這使他的運算與拓展較為快速。
Stack 在程序中有以下功能 :
在記憶體中,Stack 是由下往上長高的,若裡面沒有東西,ESP 會回到底部。